org 0x7c00

start:  ;标签：也是下一条指令的地址
    mov ax, cs
        mov ss, ax ;初始化堆栈段，使其与代码段相同。
        mov ds, ax ;初始化数据段，使其与代码段相同。
        mov es, ax ;初始化附加段，使其与代码段相同。

        mov si, msg ;si 通常用于字符串操作或指向数据的地址

print:
    mov al, [si]
        add si, 1  ;si地址值+1
        cmp al, 0x00
        je last
        mov ah, 0x0e ;设置中断调用的功能号，这里0x0e代表的是在文本模式下输出字符的功能，表示 BIOS 的 teletype 输出功能
        mov bx, 0x0f ;表示字符颜色（白色）
        int 0x10
        jmp print

last:
    hlt
        jmp last

msg:  ;定义输出数据
    db 0x0a, 0x0a             ; db => define byte, db的定义了两个数据，0a换行符
        db "Hello, DTOS!"
        db 0x0a, 0x0a
        times 510-($-$$) db 0x00  ;不满512字节，补0 $:这里这一行的地址; $$：代表这一段汇编的起始地址;
        db 0x55, 0xaa             ;主引导区MBR，最后占用两个字节，所以上一句用510来减
